#ifndef AVLTREE_H
#define AVLTREE_H

class AvlTree
{
public:
  struct Node
  {
    Node(int itemValue);
    
    int item;
    Node *pLeft;
    Node *pRight;
  };

  AvlTree();
  ~AvlTree();
  
  ////////////////////////  public accessors  ////////////////////////  
  AvlTree::Node* 	find 		(int item) const;
  void 			print		() const;
  
  ////////////////////////  public modifiers ////////////////////////  
  void 			insert		(int item);
  void 			remove		(int item);
  void 			clear		();
  
private:
  ////////////////////////  private accessors //////////////////////// 
  void			printTree	(Node *pTree) const;
  
  ////////////////////////  private modifiers ////////////////////////  
  void			insertIntoTree	(Node** ppTree, int item);
  void			clearTree	(Node** ppTree);
  
  
  ///////////////////////////  private data //////////////////////////  
  Node 			*m_pRoot;
};

#endif